home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Freeware / Adobe Air 1.5 / AdobeAIRInstaller.exe / setup.swf / scripts / mx / controls / Label.as < prev    next >
Encoding:
Text File  |  2008-10-29  |  14.0 KB  |  490 lines

  1. package mx.controls
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.events.Event;
  5.    import flash.geom.Rectangle;
  6.    import flash.text.StyleSheet;
  7.    import flash.text.TextLineMetrics;
  8.    import mx.controls.listClasses.BaseListData;
  9.    import mx.controls.listClasses.IDropInListItemRenderer;
  10.    import mx.controls.listClasses.IListItemRenderer;
  11.    import mx.core.FlexVersion;
  12.    import mx.core.IDataRenderer;
  13.    import mx.core.IFlexModuleFactory;
  14.    import mx.core.IFontContextComponent;
  15.    import mx.core.IUITextField;
  16.    import mx.core.UIComponent;
  17.    import mx.core.UITextField;
  18.    import mx.core.mx_internal;
  19.    import mx.events.FlexEvent;
  20.    
  21.    use namespace mx_internal;
  22.    
  23.    public class Label extends UIComponent implements IDataRenderer, IDropInListItemRenderer, IListItemRenderer, IFontContextComponent
  24.    {
  25.       mx_internal static const VERSION:String = "3.0.0.0";
  26.       
  27.       private var _selectable:Boolean = false;
  28.       
  29.       private var _text:String = "";
  30.       
  31.       private var _data:Object;
  32.       
  33.       mx_internal var htmlTextChanged:Boolean = false;
  34.       
  35.       private var _tabIndex:int = -1;
  36.       
  37.       private var _textWidth:Number;
  38.       
  39.       private var explicitHTMLText:String = null;
  40.       
  41.       private var enabledChanged:Boolean = false;
  42.       
  43.       private var condenseWhiteChanged:Boolean = false;
  44.       
  45.       private var _listData:BaseListData;
  46.       
  47.       private var _textHeight:Number;
  48.       
  49.       protected var textField:IUITextField;
  50.       
  51.       private var _htmlText:String = "";
  52.       
  53.       private var _condenseWhite:Boolean = false;
  54.       
  55.       mx_internal var textChanged:Boolean = false;
  56.       
  57.       public var truncateToFit:Boolean = true;
  58.       
  59.       private var textSet:Boolean;
  60.       
  61.       private var selectableChanged:Boolean;
  62.       
  63.       private var toolTipSet:Boolean = false;
  64.       
  65.       public function Label()
  66.       {
  67.          super();
  68.          tabChildren = true;
  69.       }
  70.       
  71.       override public function set enabled(param1:Boolean) : void
  72.       {
  73.          if(param1 == enabled)
  74.          {
  75.             return;
  76.          }
  77.          super.enabled = param1;
  78.          enabledChanged = true;
  79.          invalidateProperties();
  80.       }
  81.       
  82.       private function textField_textFieldStyleChangeHandler(param1:Event) : void
  83.       {
  84.          textFieldChanged(true);
  85.       }
  86.       
  87.       override public function get baselinePosition() : Number
  88.       {
  89.          var _loc1_:String = null;
  90.          var _loc2_:TextLineMetrics = null;
  91.          if(FlexVersion.compatibilityVersion < FlexVersion.VERSION_3_0)
  92.          {
  93.             if(!textField)
  94.             {
  95.                return NaN;
  96.             }
  97.             validateNow();
  98.             _loc1_ = isHTML ? explicitHTMLText : text;
  99.             if(_loc1_ == "")
  100.             {
  101.                _loc1_ = " ";
  102.             }
  103.             _loc2_ = isHTML ? measureHTMLText(_loc1_) : measureText(_loc1_);
  104.             return textField.y + _loc2_.ascent;
  105.          }
  106.          if(!mx_internal::validateBaselinePosition())
  107.          {
  108.             return NaN;
  109.          }
  110.          return textField.y + textField.baselinePosition;
  111.       }
  112.       
  113.       public function set condenseWhite(param1:Boolean) : void
  114.       {
  115.          if(param1 == _condenseWhite)
  116.          {
  117.             return;
  118.          }
  119.          _condenseWhite = param1;
  120.          condenseWhiteChanged = true;
  121.          if(isHTML)
  122.          {
  123.             mx_internal::htmlTextChanged = true;
  124.          }
  125.          invalidateProperties();
  126.          invalidateSize();
  127.          invalidateDisplayList();
  128.          dispatchEvent(new Event("condenseWhiteChanged"));
  129.       }
  130.       
  131.       public function get textWidth() : Number
  132.       {
  133.          return _textWidth;
  134.       }
  135.       
  136.       override protected function createChildren() : void
  137.       {
  138.          super.createChildren();
  139.          if(!textField)
  140.          {
  141.             mx_internal::createTextField(-1);
  142.          }
  143.       }
  144.       
  145.       mx_internal function getTextField() : IUITextField
  146.       {
  147.          return textField;
  148.       }
  149.       
  150.       private function measureTextFieldBounds(param1:String) : Rectangle
  151.       {
  152.          var _loc2_:TextLineMetrics = isHTML ? measureHTMLText(param1) : measureText(param1);
  153.          return new Rectangle(0,0,_loc2_.width + UITextField.mx_internal::TEXT_WIDTH_PADDING,_loc2_.height + UITextField.mx_internal::TEXT_HEIGHT_PADDING);
  154.       }
  155.       
  156.       mx_internal function getMinimumText(param1:String) : String
  157.       {
  158.          if(!param1 || param1.length < 2)
  159.          {
  160.             param1 = "Wj";
  161.          }
  162.          return param1;
  163.       }
  164.       
  165.       private function textFieldChanged(param1:Boolean) : void
  166.       {
  167.          var _loc2_:* = false;
  168.          var _loc3_:* = false;
  169.          if(!param1)
  170.          {
  171.             _loc2_ = _text != textField.text;
  172.             _text = textField.text;
  173.          }
  174.          _loc3_ = _htmlText != textField.htmlText;
  175.          _htmlText = textField.htmlText;
  176.          if(_loc2_)
  177.          {
  178.             dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  179.          }
  180.          if(_loc3_)
  181.          {
  182.             dispatchEvent(new Event("htmlTextChanged"));
  183.          }
  184.          _textWidth = textField.textWidth;
  185.          _textHeight = textField.textHeight;
  186.       }
  187.       
  188.       [Bindable("dataChange")]
  189.       public function get data() : Object
  190.       {
  191.          return _data;
  192.       }
  193.       
  194.       [Bindable("valueCommit")]
  195.       public function get text() : String
  196.       {
  197.          return _text;
  198.       }
  199.       
  200.       mx_internal function removeTextField() : void
  201.       {
  202.          if(textField)
  203.          {
  204.             textField.removeEventListener("textFieldStyleChange",textField_textFieldStyleChangeHandler);
  205.             textField.removeEventListener("textInsert",textField_textModifiedHandler);
  206.             textField.removeEventListener("textReplace",textField_textModifiedHandler);
  207.             removeChild(DisplayObject(textField));
  208.             textField = null;
  209.          }
  210.       }
  211.       
  212.       public function get textHeight() : Number
  213.       {
  214.          return _textHeight;
  215.       }
  216.       
  217.       mx_internal function get styleSheet() : StyleSheet
  218.       {
  219.          return textField.styleSheet;
  220.       }
  221.       
  222.       public function set selectable(param1:Boolean) : void
  223.       {
  224.          if(param1 == selectable)
  225.          {
  226.             return;
  227.          }
  228.          _selectable = param1;
  229.          selectableChanged = true;
  230.          invalidateProperties();
  231.       }
  232.       
  233.       override public function get tabIndex() : int
  234.       {
  235.          return _tabIndex;
  236.       }
  237.       
  238.       public function set fontContext(param1:IFlexModuleFactory) : void
  239.       {
  240.          this.moduleFactory = param1;
  241.       }
  242.       
  243.       override public function set toolTip(param1:String) : void
  244.       {
  245.          super.toolTip = param1;
  246.          toolTipSet = param1 != null;
  247.       }
  248.       
  249.       mx_internal function createTextField(param1:int) : void
  250.       {
  251.          if(!textField)
  252.          {
  253.             textField = IUITextField(createInFontContext(UITextField));
  254.             textField.enabled = enabled;
  255.             textField.ignorePadding = true;
  256.             textField.selectable = selectable;
  257.             textField.styleName = this;
  258.             textField.addEventListener("textFieldStyleChange",textField_textFieldStyleChangeHandler);
  259.             textField.addEventListener("textInsert",textField_textModifiedHandler);
  260.             textField.addEventListener("textReplace",textField_textModifiedHandler);
  261.             if(param1 == -1)
  262.             {
  263.                addChild(DisplayObject(textField));
  264.             }
  265.             else
  266.             {
  267.                addChildAt(DisplayObject(textField),param1);
  268.             }
  269.          }
  270.       }
  271.       
  272.       override protected function commitProperties() : void
  273.       {
  274.          super.commitProperties();
  275.          if(hasFontContextChanged() && textField != null)
  276.          {
  277.             mx_internal::removeTextField();
  278.             condenseWhiteChanged = true;
  279.             enabledChanged = true;
  280.             selectableChanged = true;
  281.             mx_internal::textChanged = true;
  282.          }
  283.          if(!textField)
  284.          {
  285.             mx_internal::createTextField(-1);
  286.          }
  287.          if(condenseWhiteChanged)
  288.          {
  289.             textField.condenseWhite = _condenseWhite;
  290.             condenseWhiteChanged = false;
  291.          }
  292.          textField.tabIndex = tabIndex;
  293.          if(enabledChanged)
  294.          {
  295.             textField.enabled = enabled;
  296.             enabledChanged = false;
  297.          }
  298.          if(selectableChanged)
  299.          {
  300.             textField.selectable = _selectable;
  301.             selectableChanged = false;
  302.          }
  303.          if(mx_internal::textChanged || mx_internal::htmlTextChanged)
  304.          {
  305.             if(isHTML)
  306.             {
  307.                textField.htmlText = explicitHTMLText;
  308.             }
  309.             else
  310.             {
  311.                textField.text = _text;
  312.             }
  313.             textFieldChanged(false);
  314.             mx_internal::textChanged = false;
  315.             mx_internal::htmlTextChanged = false;
  316.          }
  317.       }
  318.       
  319.       [Bindable("condenseWhiteChanged")]
  320.       public function get condenseWhite() : Boolean
  321.       {
  322.          return _condenseWhite;
  323.       }
  324.       
  325.       public function set listData(param1:BaseListData) : void
  326.       {
  327.          _listData = param1;
  328.       }
  329.       
  330.       private function get isHTML() : Boolean
  331.       {
  332.          return explicitHTMLText != null;
  333.       }
  334.       
  335.       public function get selectable() : Boolean
  336.       {
  337.          return _selectable;
  338.       }
  339.       
  340.       public function set text(param1:String) : void
  341.       {
  342.          textSet = true;
  343.          if(!param1)
  344.          {
  345.             param1 = "";
  346.          }
  347.          if(!isHTML && param1 == _text)
  348.          {
  349.             return;
  350.          }
  351.          _text = param1;
  352.          mx_internal::textChanged = true;
  353.          _htmlText = null;
  354.          explicitHTMLText = null;
  355.          invalidateProperties();
  356.          invalidateSize();
  357.          invalidateDisplayList();
  358.          dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  359.       }
  360.       
  361.       public function set data(param1:Object) : void
  362.       {
  363.          var _loc2_:* = undefined;
  364.          _data = param1;
  365.          if(_listData)
  366.          {
  367.             _loc2_ = _listData.label;
  368.          }
  369.          else if(_data != null)
  370.          {
  371.             if(_data is String)
  372.             {
  373.                _loc2_ = String(_data);
  374.             }
  375.             else
  376.             {
  377.                _loc2_ = _data.toString();
  378.             }
  379.          }
  380.          if(_loc2_ !== undefined && !textSet)
  381.          {
  382.             text = _loc2_;
  383.             textSet = false;
  384.          }
  385.          dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
  386.       }
  387.       
  388.       override protected function measure() : void
  389.       {
  390.          super.measure();
  391.          var _loc1_:String = isHTML ? explicitHTMLText : text;
  392.          _loc1_ = mx_internal::getMinimumText(_loc1_);
  393.          var _loc2_:Rectangle = measureTextFieldBounds(_loc1_);
  394.          measuredMinWidth = measuredWidth = _loc2_.width + getStyle("paddingLeft") + getStyle("paddingRight");
  395.          measuredMinHeight = measuredHeight = _loc2_.height + getStyle("paddingTop") + getStyle("paddingBottom");
  396.       }
  397.       
  398.       public function get fontContext() : IFlexModuleFactory
  399.       {
  400.          return moduleFactory;
  401.       }
  402.       
  403.       private function textField_textModifiedHandler(param1:Event) : void
  404.       {
  405.          textFieldChanged(false);
  406.       }
  407.       
  408.       [Bindable("dataChange")]
  409.       public function get listData() : BaseListData
  410.       {
  411.          return _listData;
  412.       }
  413.       
  414.       mx_internal function set styleSheet(param1:StyleSheet) : void
  415.       {
  416.          textField.styleSheet = param1;
  417.       }
  418.       
  419.       public function set htmlText(param1:String) : void
  420.       {
  421.          textSet = true;
  422.          if(!param1)
  423.          {
  424.             param1 = "";
  425.          }
  426.          if(isHTML && param1 == explicitHTMLText)
  427.          {
  428.             return;
  429.          }
  430.          _htmlText = param1;
  431.          mx_internal::htmlTextChanged = true;
  432.          _text = null;
  433.          explicitHTMLText = param1;
  434.          invalidateProperties();
  435.          invalidateSize();
  436.          invalidateDisplayList();
  437.          dispatchEvent(new Event("htmlTextChanged"));
  438.       }
  439.       
  440.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  441.       {
  442.          var _loc9_:* = false;
  443.          super.updateDisplayList(param1,param2);
  444.          var _loc3_:Number = getStyle("paddingLeft");
  445.          var _loc4_:Number = getStyle("paddingTop");
  446.          var _loc5_:Number = getStyle("paddingRight");
  447.          var _loc6_:Number = getStyle("paddingBottom");
  448.          textField.setActualSize(param1 - _loc3_ - _loc5_,param2 - _loc4_ - _loc6_);
  449.          textField.x = _loc3_;
  450.          textField.y = _loc4_;
  451.          var _loc7_:String = isHTML ? explicitHTMLText : text;
  452.          var _loc8_:Rectangle = measureTextFieldBounds(_loc7_);
  453.          if(truncateToFit)
  454.          {
  455.             if(isHTML)
  456.             {
  457.                _loc9_ = _loc8_.width > textField.width;
  458.             }
  459.             else
  460.             {
  461.                textField.text = _text;
  462.                _loc9_ = textField.truncateToFit();
  463.             }
  464.             if(!toolTipSet)
  465.             {
  466.                super.toolTip = _loc9_ ? text : null;
  467.             }
  468.          }
  469.       }
  470.       
  471.       [Bindable("htmlTextChanged")]
  472.       public function get htmlText() : String
  473.       {
  474.          return _htmlText;
  475.       }
  476.       
  477.       public function getLineMetrics(param1:int) : TextLineMetrics
  478.       {
  479.          return !!textField ? textField.getLineMetrics(param1) : null;
  480.       }
  481.       
  482.       override public function set tabIndex(param1:int) : void
  483.       {
  484.          _tabIndex = param1;
  485.          invalidateProperties();
  486.       }
  487.    }
  488. }
  489.  
  490.